package java2020spring;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class HexadecimalCalculator extends JFrame implements ActionListener{
	JPanel panel;
	JPanel panel2;
	JPanel top;
	JTextField text;
	String []key={" ","7","8","9","4","5","6","1","2","3"," ","0"," "};
	String []command={"C","back"};
	String [] key3={"二进制","八进制","十六进制"};
	ButtonGroup group=new ButtonGroup();
	JRadioButton []keys3=new JRadioButton[key3.length];
	JButton []keys=new JButton[key.length];
	JButton []commands=new JButton[command.length];
	double result=0.0;
	boolean firstNumber=true;
	String count="=";
	JMenuBar menuBar;
	JMenuItem menuItem1,menuItem2,menuItem3;
	JMenu menu1,menu2;
	JMenuItem useHelp;
	String str="位数过大无法转换,按任意按钮清零";
	HexadecimalCalculator(){
		setTitle("计算器");
		this.setLayout(new BorderLayout());
		this.setTitle("进制转换");
		this.setBounds(300, 100, 450, 400);
		this.setResizable(false);
		
		menuBar= new JMenuBar();
		setJMenuBar(menuBar);
		menu1=new JMenu("查看(V)");
		menu2=new JMenu("帮助(H)");
		useHelp=new JMenuItem();

		menuBar.add(menu1);
		menuBar.add(menu2);
		menuItem1=new JMenuItem("标准型");
		menuItem2=new JMenuItem("科学型");
		menuItem3=new JMenuItem("进制运算");
		menu1.add(menuItem1);
		menu1.add(menuItem2);
		menu1.add(menuItem3);
		
		menuItem2.addActionListener(new ActionListener(){   //切换到其他计算器

			@Override
			public void actionPerformed(ActionEvent arg0) {
				closeThis();
				ScienceCalculator sci=new ScienceCalculator();
				sci.setVisible(true);
				sci.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			}
			
		});
		menuItem1.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO 自动生成的方法存根
				closeThis();
				NormalCalculator nor=new NormalCalculator();
				nor.setVisible(true);
				nor.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			}
			
		});
		
		menu2.addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO 自动生成的方法存根
				HelpWindow helpWindow=new HelpWindow();
				
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}

		});
		useHelp.addKeyListener(new KeyListener(){

			@Override
			public void keyPressed(KeyEvent arg0) {
				// TODO 自动生成的方法存根
				HelpWindow helpWindow=new HelpWindow(); //创建帮助窗口
				
			}

			@Override
			public void keyReleased(KeyEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void keyTyped(KeyEvent arg0) {
				// TODO 自动生成的方法存根
				
			}
			
			
		});
		
		menu2.add(useHelp);
		
		text=new JTextField("0.0");
		text.setHorizontalAlignment(JTextField.RIGHT);
		text.setEditable(false);
		panel=new JPanel();
		panel.setLayout(new GridLayout(5,4,3,3));
		
		for(int i=0;i<commands.length;i++){
			commands[i]=new JButton(command[i]);
			panel.add(commands[i]);
		}
		for(int i=0;i<keys.length;i++){
			keys[i]=new JButton(key[i]);
			panel.add(keys[i]);
		}
		
		JPanel contentpane1=new JPanel();   //加入进制按钮面板
		JPanel contentpane2=new JPanel();
		panel2=new JPanel();
		panel2.setLayout(new BorderLayout(3,3));
		panel2.add("Center",panel);
		top=new JPanel();
		top.setLayout(new BorderLayout());
		top.add("Center",text);
		contentpane1.setLayout(new BorderLayout(3,5));
		contentpane1.add("North",top);
		contentpane1.add("Center",panel2);
		JPanel panel3=new JPanel();
		panel3.setLayout(new GridLayout(5,3,3,3));
		for(int i=0;i<key3.length;i++){
			keys3[i]=new JRadioButton(key3[i]);
		    group.add(keys3[i]);
		    panel3.add(keys3[i]);
		}
		contentpane2.setLayout(new BorderLayout(3, 5));
		contentpane2.add("Center", panel3);
		getContentPane().setLayout(new BorderLayout(3,5));
		getContentPane().add("Center", contentpane1);
		getContentPane().add("East", contentpane2);
		
		
		for(int i=0;i<key.length;i++){
			keys[i].addActionListener(this);
		}
		for(int i=0;i<command.length;i++){
			commands[i].addActionListener(this);
		}
		
		
		keys3[1].addMouseListener(new MouseListener(){   //加入进制转换功能，因为进制转换的方法不同，没办法用循环完成

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				try{
				int i=Integer.parseInt(text.getText());
				
				
					text.setText(Integer.toBinaryString(i));
				}
				catch(NumberFormatException e){
					text.setText("位数过大无法转换,按任意按钮清零");
				
					
				}
				
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}
			
		});
		keys3[1].addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				try{
				int i=Integer.parseInt(text.getText());
				
				
					text.setText(Integer.toOctalString(i));
				}
				catch(NumberFormatException e){
					text.setText("位数过大无法转换,按任意按钮清零");
				
					
				}
			
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}
			
		});
		keys3[2].addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				try{
				int i=Integer.parseInt(text.getText());
				
					text.setText(Integer.toHexString(i));
				}
				catch(NumberFormatException e){
					text.setText("位数过大无法转换,按任意按钮清零");
					
					
				}
				
			}
			

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO 自动生成的方法存根
				
			}
			
		});
	}

	
	@Override
	public void actionPerformed(ActionEvent e) {    //判断事件来源来决定做什么操作
		// TODO 自动生成的方法存根
		String eCmd=e.getActionCommand();
		
		if(text.getText().equals(str))
			setTextClear();
		else{
			if("0123456789.".indexOf(eCmd)>=0)
				setTextNumber(eCmd); 
			else if(eCmd.equals(command[0]))
				setTextClear();
			else if(eCmd.equals(command[1]))
				setTextBack();
		}
	}
	
	public void setTextNumber(String Number){ //点击数字按钮可在文本框显示的函数
		if(firstNumber)
			text.setText(Number);
		else if((Number.equals("."))&&(text.getText().indexOf(".")<0))
			text.setText(text.getText()+".");	
		else if(!Number.equals("."))
			text.setText(text.getText()+Number);
		firstNumber=false;
	}
	
	public void setTextClear(){					//清空函数
		text.setText("0");
		firstNumber=true;
		result=0.0;
	}
	public void setTextBack(){ 					//退格函数
		String backText=text.getText();
		int i=backText.length();
		if(i>0){
			backText=backText.substring(0,i-1);
			if(backText.length()==0){
				text.setText("0");
				firstNumber=true;
				count="=";
			}
			else
				text.setText(backText);
		}
	}
	public void closeThis(){					//关闭当前窗口
		this.setVisible(false);
	}
}
